package com.example.kotlindemo.modules.network

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ProgressBar
// import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels // 导入委托
import androidx.lifecycle.Observer // 导入 Observer
import com.example.kotlindemo.R

// 假设这是你的登录 Fragment 或 Activity
class LoginFragment : Fragment() { // 或者 extends AppCompatActivity

    // 使用 ktx 委托方便地获取 ViewModel 实例
    // ViewModel 的生命周期将与 Fragment (或 Activity) 绑定
    private val loginViewModel: LoginViewModel by viewModels()

    // 声明你的 UI 控件
    private lateinit var loginButton: Button
    private lateinit var statusTextView: TextView
    private lateinit var progressBar: ProgressBar
    private lateinit var userInfoFragmentContainer: View // 假设有个地方显示用户信息

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_login, container, false) // 替换成你的布局文件

        // 初始化 UI 控件
        loginButton = view.findViewById(R.id.login_btn_async)
        statusTextView = view.findViewById(R.id.login_status)
        progressBar = view.findViewById(R.id.progress_bar)
        // userInfoFragmentContainer = view.findViewById(R.id.user_info_container) // 如果需要

        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // 设置登录按钮点击事件
        loginButton.setOnClickListener {

            if (true) {
                val params = LoginParams("hmheima",  "Hmheima%123" ) // 根据你的 LoginParams 调整
                loginViewModel.performLogin(params)
            } else {
                Toast.makeText(requireContext(), "请输入用户名和密码", Toast.LENGTH_SHORT).show()
            }
        }

        // 观察 ViewModel 中的 LiveData
        loginViewModel.loginResult.observe(viewLifecycleOwner, Observer { resource ->
            // 当 LiveData 数据变化时，这个 lambda 会被调用
            when (resource) {
                is Resource.Loading -> {
                    // 显示加载状态
                    progressBar.visibility = View.VISIBLE
                    loginButton.isEnabled = false
                    statusTextView.text = "正在登录..."
                }
                is Resource.Success -> {
                    // 登录成功
                    progressBar.visibility = View.GONE
                    loginButton.isEnabled = true
                    statusTextView.text = "登录成功！"

                    val userResponse = resource.data // 获取 UserResponse 数据
                    Toast.makeText(requireContext(), "欢迎回来, ${userResponse.username}", Toast.LENGTH_SHORT).show()

                    // 保存 Token (更好的做法是在 Repository 或 UseCase 中完成)
                    loginViewModel.saveToken(context, userResponse.token)

                    // 更新用户信息 UI (调用另一个 Fragment 的方法)
                    updateUserInfoUI(userResponse)

                    // 可能需要导航到下一个界面
                    // findNavController().navigate(R.id.action_loginFragment_to_mainFragment)
                }
                is Resource.Error -> {
                    // 登录失败
                    progressBar.visibility = View.GONE
                    loginButton.isEnabled = true
                    statusTextView.text = "登录失败"
                    Toast.makeText(requireContext(), "登录失败: ${resource.message}", Toast.LENGTH_LONG).show()
                    showErrorOnUserInfoUI(resource.message) // 在用户信息区域显示错误
                }
            }
        })
    }

    // --- 更新或显示错误在另一个 Fragment (UserInfoFragment) ---
    // 这部分逻辑与你之前的类似，但现在数据来自 ViewModel
    private fun updateUserInfoUI(userResponse: UserResponse) {
        val userInfoFragment = parentFragmentManager.findFragmentById(R.id.user_info_fragment) as? UserInfoFragment // 替换成你的 Fragment ID
        userInfoFragment?.updateUserInfo(userResponse)
    }

    private fun showErrorOnUserInfoUI(errorMessage: String) {
        val userInfoFragment = parentFragmentManager.findFragmentById(R.id.user_info_fragment) as? UserInfoFragment
        userInfoFragment?.showError("登录失败: $errorMessage")
    }
}

// 假设的 UserInfoFragment 接口 (你需要有这个 Fragment)
interface UserInfoUI {
    fun updateUserInfo(user: UserResponse)
    fun showError(message: String)
}

// class UserInfoFragment : Fragment(), UserInfoUI { ... 实现接口方法 ... }
